Many computers have multiple processors that can process information, such as packets of data received over a network. In order to leverage processing power of more than a single processor of a computer, a network device such as a network interface card can support receive-side scaling (RSS) and/or receive flow steering (RFS) technologies. The network device can leverage these technologies to distribute data packets received over the network to different processors for processing. However, these technologies will distribute all data packets of a single flow of data between a source and a destination to the same processor of the destination.
In one example, a single flow of data corresponds to packets communicated between a remote computer as a source and a service hosted by the computer as the destination. The network device receives packets from the remote computer as the single flow of packets destined for the service. Different flows of packets can be distinguished between each other based upon source and destination information, such as source IP and port and destination IP and port. However, existing packet distribution techniques are unable to distribute packets of a single flow to multiple processors. Thus, the same processor will always process packets of the same single flow.
In particular, all data packets of that single flow of data will trigger the network device to interrupt the same processor for processing those data packets. Thus, these technologies are limited to merely interrupting the same processor for processing packets of the same single flow. For example, RSS will hash data packets based upon a source IP and port so that data packets from different source IPs and ports will be processed by different processors. However, a single flow of data from the same source IP and port will cause the same processor to be interrupted for processing all packets of that single flow. This significantly limits the ability to leverage processor parallelism, and causes bottlenecks where the same processor is overburdened with processing packets of the same flow. Further, the delay in processing the packets will increase latency for the remote client computer in accessing the service.